/**  
 * @class Vector  
 * @brief 表示数学向量的类  
 */  
class Vector {  
private:  
    int dimensions;  ///< 向量的维度
    double* elements;   ///< 存储向量元素的数组指针

public:  
    /**  
     * @brief 构造具有指定维度和初始值的向量  
     * @param dimensions 向量的维度  
     * @param initialValue 所有元素的初始值  
     */  
    explicit Vector(int dimensions, double initialValue);  

    /**  
     * @brief 析构函数  
     */ 
    ~Vector();

    /**  
     * @brief 设置向量各个元素的值  
     * @param index 元素的索引  
     * @param value 元素的值 
     */  
    void setElement(int index, double value);; 
};

/**  
 * @class Matrix
 * @brief 定义矩阵类  
 */ 
class Matrix
{
private:
    int numRows;  ///< 矩阵的行数  
    int numCols;  ///< 矩阵的列数  
    double** data;  ///< 存储矩阵元素的二维数组

public:
    /**  
     * @brief 构造Matrix对象
     * @param rows 矩阵的行数  
     * @param cols 矩阵的列数  
     */ 
    Matrix(int rows, int cols);

    /**  
     * @brief 析构函数  
     */ 
    ~Matrix();

    /**  
     * @brief 设置矩阵中指定位置的元素  
     * @param row 行索引  
     * @param col 列索引  
     * @param value 要设置的值  
     */  
    void setElement(int row, int col, double value);

    /**  
     * @brief 矩阵相加  
     * @param other 另一个矩阵  
     * @return 相加后的结果矩阵  
     */  
    Matrix add(const Matrix& other) const;

    /**  
     * @brief 矩阵左乘另一个矩阵  
     * @param other 另一个矩阵  
     * @return 相乘后的结果矩阵  
     */  
    Matrix left_multiply(const Matrix& other) const;

    /**  
     * @brief 矩阵右乘另一个矩阵  
     * @param other 另一个矩阵  
     * @return 相乘后的结果矩阵  
     */  
    Matrix right_multiply(const Matrix& other) const;

    /**  
    * @brief 矩阵数乘  
    * @param scalar 标量值  
    * @return 数乘后的矩阵  
    */  
    Matrix scalarMultiply(double scalar) const;

    /**  
    * @brief 求矩阵的逆矩阵  
    * @return 逆矩阵 
    */  
    Matrix inverse() const;

    /**  
    * @brief 求特征值  
    * @return 包含矩阵所有特征值的向量  
    */  
    Vector eigenvalues() const;

    /**  
    * @brief 求矩阵的所有特征向量。   
    * @return 包含矩阵所有特征向量的矩阵,每一列都是矩阵的一个特征向量。  
    */  
    Matrix eigenvectors() const;

    /**  
    * @brief 矩阵左乘向量 
    * @param vector 向量
    * @return 左乘后的矩阵 
    */  
    Matrix leftmultiply(Vector vector) const;

    /**  
    * @brief 矩阵右乘向量 
    * @param vector 向量
    * @return 右乘后的矩阵 
    */  
    Matrix rightmultiply(Vector vector) const;
};


